<?php defined('LFNC_VERSION') or die('forbidden');


/**
* MLT Web Engine
* http://www.molotsoft.ru
*
* @package MLT_WE
* @subpackage Lucky_Funcs
* @author Ivan Chistyakov <ivan@molotsoft.ru>
* @version $Id: array.lfnc.php 224 2009-04-09 07:59:58Z molotsoft@gmail.com $
* @link $HeadURL: http://lucky-funcs.googlecode.com/svn/branches/version_1/funcs/array.lfnc.php $
*/


function a( /* [...] */ ) {
	return func_get_args();
}

function array_equal($array) {
	return count(array_unique($array)) === 1;
}


function array_fill_0($num, $value) {
	return array_fill(0, $num, $value);
}

function array_fill_count($input, $value) {
	return array_fill_0(count($input), $value);
}

function array_fill_input($input, $value) {
	return array_combine(array_keys($input), array_fill_count($input, $value));
}

function array_fill_values($input, $value) {
	return array_fill_keys(array_keys($input), $value); // php 5 >= 5.2.0
}

if (!function_exists('array_fill_keys')) {
	function array_fill_keys($keys, $value) {
		return array_combine($keys, array_fill_count($keys, $value));
	}
}


function need_array($input, $scalar_count = 1) {
	if (is_array($input)) {
		return $input;
	} elseif (is_object($input)) {
		return get_object_vars($input);
	} elseif (is_scalar($input)) {
		return array_fill_0($scalar_count, $input);
	} else {
		return array();
	}
}


function max_count_array($var_array) {
	return max(array_map('count', need_array($var_array)));
}

function max_count($var1 /* [, $var2, ...] */ ) {
	$args = func_get_args();
	return max_count_array($args);
}


function min_count_array($var_array) {
	return min(array_map('count', need_array($var_array)));
}

function min_count($var1 /* [, $var2, ...] */ ) {
	$args = func_get_args();
	return min_count_array($args);
}


function array_map_scalar($callback, $var1 /* [, $var2, ...] */ ) {
	$args = func_get_args();
	array_shift($args);
	$args = array_map('need_array', $args, array_fill_count($args, max_count_array($args)));
	array_unshift($args, $callback);
	return call_user_func_array('array_map', $args);
}


function array_unshifted($array, $var /* [, ...] */ ) {
	$args = func_get_args();
	$args[0] = &$array;
	call_user_func_array('array_unshift', $args);
	return $array;
}

function array_shifted($array, $count = 1) {
	for ($i = 0; $i < $count; $i ++) array_shift($array); // loop_array($count, 'array_shift', array(&$array));
	return $array;
}


function array_pushed($array, $var /* [, ...] */ ) {
	$args = func_get_args();
	$args[0] = &$array;
	call_user_func_array('array_push', $args);
	return $array;
}

function array_poped($array, $count = 1) {
	for ($i = 0; $i < $count; $i ++) array_pop($array); // loop_array($count, 'array_pop', array(&$array));
	return $array;
}


function isset_in_array($array, $key, $default_key, $default_value = NULL) {
	if (isset($array[$key])) {
		return $array[$key];
	} elseif (isset($array[$default_key])) {
		return $array[$default_key];
	} elseif (is_null($default_value)) {
		return $default_key;
	}
	return $default_value;
}

function in_string_or_array($needle, $haystack) {
	return (is_string($haystack) && ($haystack === $needle)) || (is_array($haystack) && in_array($needle, $haystack, TRUE));
}


function first_key($input) {
	$keys = array_keys($input);
	return isset($keys[0]) ? $keys[0] : FALSE;
}

function last_key($input) {
	$keys = array_keys($input);
	return isset($keys[count($keys) - 1]) ? $keys[count($keys) - 1] : FALSE;
}

function even_key($input, $key) {
	return !is_false($index = array_search($key, array_keys($input), TRUE)) ? even($index) : FALSE;
}

function odd_key($input, $key) {
	return !is_false($index = array_search($key, array_keys($input), TRUE)) ? odd($index) : FALSE; // !even_key($input, $key)
}


?>